perm filename PFAIL.FAI[PAG,LCS]16 blob
sn#502593 filedate 1980-03-27 generic text, type T, neo UTF8
TITLE PFAIL; ********* OCT 78 *********
INTERNAL PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT,INMUS
ENTRY LOOKF,LOOKX,LOOK,SHFTQ,SORT2,NORH,FNDEND,MINMAX
ENTRY RLOOP,BLTEM,IFIX,FLOAT,RCURVE
;; ENTRY PFIBX,PFIB,RLOOP,BLTEM,IFIX,FLOAT
ENTRY GETPTS,MOVIT,EXTEN,DBAR,QRN,SORT,SHIFT,SHFT1,SHFT0
ENTRY PSHFT,ADRST,STAFF,RIGHT,RESTS,EXCHG,EXCH,SHRNK,EXPND,CLFNUM
ENTRY SLRV,CLEFN,MMNN,CODEN,ZERO,BARFAC
EXTERNAL .COMM.,XRN,KJY,PTR,POSI,AMOD,KNR,NNP,PX,XXX,Q,SF,LLL
EXTERNAL RCLF,STF,PTMOVE,IPG,JN,RCLF,MNX,ALOG,ENDL
DEFINE ERROR (MSG)
< JSA 16,.ERROR
JUMP [ASCIZ/MSG/
]
>
.ERROR: 0
OUTSTR [ASCIZ/?
/] ;MAKE SURE HE CAN SEE HIS ERROR
OUTSTR @(16) ;OUTPUT ERROR MESSAGE
CALLI 1,12 ;LET USER CONTI2UE
JRA 16,1(16)
CH←13
REGS: BLOCK 20
;LOOK(<FILE>) FOR NO EXT., LOOKD() FOR .DAT, LOOKF() FOR .MS
LOOKF: 0
MOVSI 0,'MS '
JRST LOOK1
LOOKX: 0
MOVE 0,@1(16)
MOVEM 0,FILNAM
JSA 16, INTFIQ
MOVE 0,DIR
JRST LOOK1
LOOK: 0
MOVEI 0,0
LOOK1: MOVEM 0,DIR+1
MOVE 0,@(16)
MOVEM 0,FILNAM
JSA 16, INTFIQ
SETZM DIR+2
SETZM DIR+3
LOOKUP CH,DIR
TDZA 0,0
MOVNI 0,1
JRA 16,1(16)
INTFIQ: 0 ;INITS DSK FOR INPUT
MOVEI REGS
BLT REGS+3
INIT CH,17
SIXBIT/DSK/
0
HALT .-3
; ERROR <CAN'T INIT DSK!>
PUSHJ 17,INTF4
JRA 16,0(16)
INTF4: MOVE 0,FILNAM#
MOVEM 0,FN#
MOVE 1,[POINT 7,FN]
INTF3: MOVE 2,[POINT 6,DIR]
SETZM DIR
MOVEI 3,5
INTF1: ILDB 0,1
CAIN 0," "
JRST INTF2
SUBI 0,40
IDPB 0,2
SOJG 3,INTF1
INTF2: HRLZI REGS
BLT 3
POPJ 17,
DIR: BLOCK 4
SHFTQ: 0 ;CALL SHFTQ(R)
MOVE JN+1
SOS
SETZ 1,
MOVE 3,@(16) ;R
SHQ: MOVE 2,XRN(1)
FADRM 3,Q-1(2)
CAMGE 1,0
AOJA 1,SHQ
JRA 16,1(16)
SORT2: 0 ;SUBROUTINE SORT2(RPOS,M)
MOVEI 2,2 ;DIMENSION RPOS(2,200)
SO3: MOVE 6,2 ;(K=L HERE)
SETO 11, ;L=2
HRRZI 3,@(16) ;3 J=-1
MOVE 4,2 ;RX=RPOS(1,L-1)
SUBI 4,1 ;L-1
IMULI 4,2
ADDI 4,(3)
MOVE 5,-2(4) ;RX
SO2: MOVE 7,6 ; DO 2 K=L,M
;IF(RPOS(1,K).GE.RX)GO TO 2
IMULI 7,2 ;IF(RPOS(1,K).GE.RX)GO TO 2
ADDI 7,(3)
CAMG 5,-2(7)
JRST SO1 ; CONTINUE
MOVE 5,-2(7) ; RX=RPOS(1,K)
;;C WHY WERE ALL THE RX'S JX ????? 9/6/73
MOVE 11,6 ;J=K
SO1: CAMGE 6,@1(16) ;2 CONTINUE
AOJA 6,SO2
JUMPL 11,SO4 ;IF(J)GO TO 4
MOVE 12,2 ;K=L-1
SOS 12
IMULI 12,2 ;(K*2)
ADD 12,3 ;CALL EXCH(RPOS(1,K),RPOS(1,J))
MOVE 10,-2(12)
IMULI 11,2
ADD 11,3
EXCH 10,-2(11)
MOVEM 10,-2(12)
MOVE 10,-1(12) ;CALL EXCH(RPOS(2,K),RPOS(2,J))
EXCH 10,-1(11)
MOVEM 10,-1(12)
SO4: CAMGE 2,@1(16) ;4 L=L+1
AOJA 2,SO3 ;IF(L.LE.M)GO TO 3
JRA 16,2(16) ;END
NORH: 0 ;FUNCTION NORH(KK)
MOVE 15,@1(16) ;NOW**** FUNCTION NORH(KK,K)
MOVE 1,XRN+=499(15) ;FIND VALUE IN NN ARRAY IN DO LOOP.
MOVEM 1,@(16) ;KK=NN(K)
SETZ 0,
JUMPLE 1,NOR
CAILE 1,2 ;NORH=-1 IF KK≤0, >18, NOT 1,2,4,17.
CAIN 1,4
JRA 16,1(16)
CAIE 1,=18 ;USED IN RESPC.F4
CAIN 1,=17
JRA 16,1(16)
NOR: SETO 0,
JRA 16,1(16)
FNDEND: 0 ;CALL FNDEND(R)
SETZ 1,
FA: MOVE 2,XRN+=500(1) ;NN(K)
JUMPLE 2,FB
CAIG 2,3
JRST FC
CAIE 2,=17
CAIN 2,=18
SKIPA
FB: AOJA 1,FA ;ASSUMES IT WILL ALWAYS END PROPERLY!!!
FC: MOVN 2,XRN(1) ; MM(K)
FADR 2,[2.0]
FADR 2,ENDL ;+ENDLN
;; FADR 2,RSP+=20 ;+ENDLN
MOVEM 2,@(16)
JRA 16,1(16)
MINMAX: 0 ; SUBROUTINE MINMAX(JRN)
MOVEI 1,@(16) ;COMMON /MNX/MIN,MAX,JT DIM. JRN(1)
;; MOVE 1,0 ; COMMON /MNX/MIN,MAX,JT /XRN/JRN(1)
MOVE 0,(1) ;GET FIRST VALUE OF CURRENT JRN ARRAY
MOVE 3,
MOVEI 2,2 ; MIN=10000
;;MM: CAMLE 0,XRN-1(2) ; MAX=0
MM: CAMLE 0,1(1) ; MAX=0
MOVE 0,1(1) ; DO 107 K=1,JT
CAMGE 3,1(1) ; NN=JRN(K)
MOVE 3,1(1) ; IF(NN.LT.MIN)MIN=NN
AOJ 1,
CAMGE 2,MNX+2
AOJA 2,MM ;107 IF(NN.GT.MAX)MAX=NN
MOVEM 0,MNX ; END
MOVEM 3,MNX+1
JRA 16,1(16)
PFIBX: 0 ;DATA FIB/0.618/, RFIB/-.382/,ALG/0.30103/
;100 ACCEPT 10,A 10 FORMAT(F)
MOVE 12,@(16) ;PFIBX=14
MOVE 13,[14.0] ;IF(A.EQ.1)GO TO 20
CAMN 12,[1.0] ;Z=FIB
JRST PFX ;IF(A.LT.1)Z=RFIB
JSA 16,ALOG ;RH=ABS(ALOG(A)/ALOG(2.0))
JUMP 12
FDVR 0,[0.6931472]
MOVM 11,0
MOVE 10,[0.618]
SKIPG ;L=RH
MOVN 10,[0.382] ;IF(L.EQ.0)GO TO 4
KIFIX 7,11
MOVE 6,7 ;SAVE L FOR LATER
JUMPE 6,PFZ
PF: MOVE 2,13 ; DO 3 K=1,L
FMPR 2,10 ;3 PFIBX=PFIBX+PFIBX*Z
FADR 13,2
SOJG 6,PF
PFZ: FLTR 7,7 ;4 RH=RH-L
FSBR 11,7 ;IF(RH.EQ.0)GO TO 20
JUMPE 11,PFX
MOVE 2,13
FMPR 2,10
FMPR 2,11 ;PFIBX=PFIBX+PFIBX*Z*RH
FADR 13,2
PFX: MOVE 0,13 ;SEND BACK THE RESULT
JRA 16,1(16)
PFIB: 0 ;FUNCTION PFIB(P) PSEUDO-FIBONACCI RHYTHM SPACER
MOVN 0,@(16) ;PFIB=(P+(.125-P)*(.8+.01*P))*50
FADR 0,[0.125] ;END
MOVE 1,@(16)
FMPR 1,[0.02]
FADR 1,[0.8]
FMPR 0,1
FADR 0,@(16)
FMPR 0,[50.0]
JRA 16,1(16)
RLOOP: 0 ;CALL RLOOP(A,B,K)
HRLI 1,@1(16) ;DIMENSION A(1),B(1) -- SOURCE
HRRI 1,@(16) ;DO 1 J=1,K -- DESTINATION
MOVEI 2,@(16) ;1 A(J)=B(J) -- WORD COUNT
ADD 2,@2(16) ;LOC OF ARRAY A + WDCNT.
BLT 1,-1(2)
JRA 16,3(16)
BLTEM: 0
HRLI 1,PX ;KWDS(...)=KPN(...) PX IS LOC. OF KPN ARRAY
HRRI 1,PTR ;RIGHT HALF IS LOC OF KWDS ARRAY
MOVE 2,RCLF+3 ;GET NUM. OF ITEMS (RCLF+3=ITEM)
BLT 1,PTR(2) ; PTR(2) IS WD CNT. (ITEM+1)
HRLI 1,Q ;RN(...)=Q(...)
HRRI 1,XRN
MOVE 2,POSI+=9 ;THIS IS JPQ, NUM OF WDS.
BLT 1,XRN-1(2)
JRA 16,0(16)
IFIX: 0
KIFIX 0,@(16)
JRA 16,1(16)
FLOAT: 0
FLTR 0,@(16)
JRA 16,1(16)
K←15↔J←14↔ M←2↔ R2←5↔ X←6↔ L←4↔ R←7↔ A←11↔RY←3↔RZ←13↔JJ2←12
; SUBROUTINE GETPTS
; COMMON/KNR/N(500) /NNP/NP(500)
;XXX COMMON/XRN/RN(4000) /KJY/ K,J
; COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS
;XXX 1/PTR/PWDS(250),ITEM,LL,I,IX
; EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3)),(R11,RJQ(9))
; 1,(R6,RJQ(4))
GETPTS: 0 ;CALL GETPTS(N,RN,PWDS)
SETZ J, ; J=0
SETZ K, ; K=0
MOVE JJ2,POSI+=8
KIFIX R2,.COMM. ;GET THE STAFF NUM. (NEG= ALL IN THIS PROG.)
SETZ X,
MOVEI M,@2(16); DO 1 M=1,ITEM
G1: AOJ X,
MOVE L,(M)
MOVEI R,@1(16) ;L=PWDS(M)
ADDI R,(L) ;IF(RTLINE(L))GO TO 1
JUMPL R2,G9 ;NEG R2=ALL STAVES
KIFIX A,1(R) ;CHECK NOW FOR CORRECT STAFF
CAME R2,A
JRST GX ;NOT THE ONE.
;* MOVE 1,1(R) ;RN(L+2)
;;NEVER USED IN 'PARTS'- CAML R2,[=5.0]
;; JRST GZ
;PT MOVE A,1(R)
;; SKIPE IPG ;IF(IPG)GO TO GSTF
;; JRST GSTF
;; KIFIX A,A
;; FLTR A,A ;STAFF=IFIX(STAFF) DROPS DECIS.
;PT SKIPL IPG
;PT JRST G9
;PTGSTF: CAME R2,A ;FINDS STAFF #
;PT JRST GX
;;GZ: MOVE A,.COMM.+7 ;RY=RN(L+1)
;; JUMPLE A,G9 ;F(R6.LE.0)GO TO 9
;; CAME A,(R) ;IF(R6.NE.RY)GO TO 1
;; JRST GX
; CHECK CODE NUM
G9: MOVE A,2(R)
CAMG A,.COMM.+6 ;R5 9 IF(OUTLIM(R4,R5,RN(L+3)))GO TO 2
CAMGE A,.COMM.+5 ;R4
JRST G2
SKIPG JJ2
MOVE JJ2,X
MOVE .COMM.+=8 ;IF(IPG)RN(L+2)=R7
AOJ J,
; IN LIMITS?
; MOVEI A,XRN+=2498 ;J=J+1
;; MOVEI A,KNR-1
;; ADDI A,(J)
MOVEI 0,(L)
AOJ K, ;K=K+1
;; MOVEI 1,NNP-1
;; ADDI 1,(K) ;NP(K)=L
MOVEM 0,NNP-1(K)
ADDI 0,3 ;N(J)=L+3
MOVEM 0,KNR-1(J)
; NP IS FOR USE IN JUSTIFY ROUTINE
G2: KIFIX RY,(R) ;2 IF(RY.LT.4)GO TO 1
CAIN RY,2 ;IF(RY.EQ.2)GO TO GRST
JRST GRST
CAIGE RY,4
JRST GX
MOVE RZ,-1(R) ;RZ=RN(L) WD CNT
CAIE RY,=44 ;CODE 4 IS SOMETIMES =44
JRST .+4
CAMG RZ,[2.0] ;IF(RZ.LE.2)THEN IT'S AN CODE 44 BAR LINE.
JRST GX
JRST G5 ;FOUND A LINE
CAILE RY,7
JRST GX ;IF(RY.GT.7)GO TO 1
; TWO-ENDED ITEM?
;; CAMN RY,[=4.0] ;GO TO(4,5,6,7),IFIX(RY)-3
;; JRST G4
;; CAMN RY,[=5.0]
;; JRST G5
;; CAMN RY,[=6.0]
;; JRST G6
;; CAMG RZ,[=4.0] ;4 IF(RZ.GT.2)GO TO 5
;; JRST G5 ; THERE IS A TRILL WIGGLE
;; JRST GX ;GO TO 1 -- NO WIGGLE (P7≠0)
XCT TBL-4(RY) ; NEXT REPLACES THE ABOVE.
JRST G5
JRST GX
TBL: JRST G4
JRST G5
JRST G6
CAMG RZ,[4.0]
G4: CAMG RZ,[=3.0] ;7 IF(RZ.GT.3)GO TO 5
JRST GX
JRST G5 ;GO TO 1
GRST: MOVE RZ,-1(R) ;FOR 'CENTERED' RESTS
JRST G8
G6: CAMGE RZ,[=8.0] ;6 IF(RZ.LT.8)GO TO 8
JRST G8
SKIPL 6(R) ;IF(R7)GO TO 8
SKIPN =9(R) ;IF(R10.EQ.0)GO TO 8
JRST G8
;; MOVE A,7(R) ; IF(OUTLIM(R4,R5,RN(L+8)))GO TO 8
;; JUMPE A,G5 ;IF(R8.EQ.0)GO TO G5(MOVE ONLY P3,6)
SKIPG A,7(R) ;IGNORE P8 IF IT IS 0 OR -
JRST G8
CAMG A,.COMM.+6
CAMGE A,.COMM.+5
JRST G8
CAMLE JJ2,X
MOVE JJ2,X
AOJ J, ; IN LIMITS?
MOVEI 0,=8(L) ;J=J+1
MOVEM 0,KNR-1(J)
G8: CAML RZ,[=7.0] ;8 IF(RZ.LT.7)GO TO 5
SKIPG A,8(R) ; R9 IF(R9.LE.0)GO TO G5
JRST G5
CAIE RY,2 ;IF(RY.EQ.2)GO TO GRST2 (NEW CENTERED RESTS)
SKIPE 7(R) ; R8
JRST GRST2
SKIPL 6(R) ; R7
JRST G5
GRST2: CAMG A,.COMM.+6
CAMGE A,.COMM.+5 ;R4
JRST G5
CAMLE JJ2,X
MOVE JJ2,X
AOJ J, ;J=J+1 ; IN LIMITS?
MOVEI 0,=9(L)
MOVEM 0,KNR-1(J) ;N(J)=L+9
G5: CAIN RY,2 ;IF(RY.EQ.2)GO TO GX
JRST GX
MOVE A,5(R)
CAMG A,.COMM.+6
CAMGE A,.COMM.+5 ;R4
JRST GX
CAMLE JJ2,X
MOVE JJ2,X
AOJ J, ; IN LIMITS?
;| MOVEI A,XRN+=2498 ;J=J+1
;; ADDI A,(J)
MOVEI 0,6(L) ;5 IF(OUTLIM(R4,R5,RN(L+6)))GO TO 1
;; ADDI 0,6 ;N(J)=L+6
MOVEM 0,KNR-1(J)
;;GX: CAMGE X,PTR+=250 ;1 CONTINUE
GX: CAMGE X,LLL ;1 CONTINUE
AOJA M,G1
MOVEM JJ2,POSI+=8
MOVEM J,KJY+1
MOVEM K,KJY
JRA 16,3(16)
; SUBROUTINE MOVIT(RN,NP,R4,R5,R8,R9)
; DIMENSION NP(1),RN(1)
; COMMON /KJY/ DONT,J
MOVIT: 0 ;RDIS=(R9-R8)/(R5-R4)
MOVE R,@5(16)
FSBR R,@4(16)
MOVE RY,@3(16)
FSBR RY,@2(16)
FDVR R,RY
; MOVEI L,XRN+=2499 ; DO 1 K=1,J
MOVEI L,@1(16) ; GET NP ARRAY LOC
SETZ K,
MOVE 0,@5(16) ; SET UP R9
;;M1: MOVE X,L ; L=NP(K)
M1: MOVEI R2,@(16) ;RA=RN(L)
ADD R2,(L)
MOVEI RZ,(R2)
MOVE R2,-1(R2)
CAML R2,@2(16) ;IF(OUTLIM(R4,R5,RA))GO TO 1
CAMLE R2,@3(16)
JRST MX
JUMPE 0,M2 ;IF(R9.NE.0)RA=(RA-R4)*RDIS
FSBR R2,@2(16)
FMPR R2,R
M2: FADR R2,@4(16) ; RN(L)=R8+RA
MOVEM R2,-1(RZ)
MX: AOJ K, ;1 CONTINUE
CAMGE K,KJY+1
AOJA L,M1
JRA 16,6(16)
EXTEN: 0 ;FUNCTION EXTEN(X)
HRRM 16,.+2
JSA 16,AMOD ;EXTEN=AMOD(X,1.)*10.
JUMP @0
JUMP [=1.0]
FMPR [=10.0]
JRA 16,1(16)
DBAR: 0 ; CALL DBAR(K,ITEM,J)
MOVE 4,@2(16) ; -J-RR=RN(J+3)
;PT SKIPL IPG ;IF(IPG.GE.0)LEAVE BAR ALONE!
JRST DB1
;PT KIFIX 2,XRN+3(4) ; -RN(J+4)-
;KZ=RN(J+4)/100.
;PT IMULI 2,=100 ;RN(J+4)=1.+KZ*100.
DB1: MOVE 1,@1(16)
MOVE 7,XRN+2(4) ; -RR-
MOVE 4,@(16) ; DO 82 KY=K+1,ITEM
DB: MOVE 5,PTR(4) ;KZ=PWDS(KY)
MOVE 6,XRN(5) ; IF(RN(KZ+1).NE.4)GO TO 82
CAME 6,[4.0]
JRST DB82
MOVE 6,XRN-1(5) ;IF(RN(KZ).GT.3)GO TO 82
CAMLE 6,[3.0]
JRST DB82
;;C AVOIDS DUPLICATE BARS.
MOVN 6,XRN+2(5) ;IF(ABS(RR-RN(KZ+3)).GT..5)GO TO 82
FADR 6,7
SKIPGE 6
MOVNS 6
CAMLE 6,[0.5]
JRST DB82
MOVE 6,[99.0] ;RN(KZ+2)=99
MOVEM 6,XRN+1(5)
SETZM XRN(5) ;RN(KZ+1)=0
DB82: AOJ 4, ;82 CONTINUE
CAIGE 4,(1)
JRST DB
MOVEM 7,DBX# ; RR SAVES IT FOR ADRST ROUTINE
JRA 16,3(16)
QRN: 0 ; CALL QRN(J,XWDS,K)
MOVE 4,@(16) ;810 JA=PWDS(K+1)
PN4: MOVE 5,@2(16) ; DO 7 KY=J,JA-1
MOVE 5,PTR(5) ; - JA -
MOVE 6,XXX ; PN(LK)=RN(KY)
MOVEI 1,(6) ; SAVE IT FOR A LITTLE LATER
PN: MOVE 7,XRN-1(4) ;7 LK=LK+1
MOVEM 7,Q-1(6)
AOJ 4, ;AC4 IS KY, AC6 IS LK
CAME 4,5
AOJA 6,PN
SKIPN SF ;IF(KL.EQ.0)GO TO PN5
JRST PN5
MOVE [1.0] ;PUT A 1.0 AS RHYTHM FOR REST OR NOTE
ADD 6,SF
MOVEM Q-1(6) ;PUT IT IN PARAM 7 OR 9
PN5: AOJ 6,
MOVE 2,.COMM.+6 ; IF(R5)GO TO 6666
JUMPL 2,PN2 ; IF(PN(J).EQ.2)LK=LK+1
MOVEM 2,Q+4(1) ; PN(J+5)=R5
MOVE 3,[3.0]
PN3: MOVE 4,3 ; IS THE WDCNT BIG ENOUGH?
FSBR 4,Q-1(1)
KIFIX 4,4
ADD 6,4 ; UPDATE THE MAIN COUNTER
;PT??? SETZM Q+3(1) ; ZERO PARAM 4, THE VERTICAL POS. PN(J+4)
MOVEM 3,Q-1(1) ; PN(J)=3 OR 4
JRST PN1
PN2: MOVE 3,RCLF ; IF(R.NE.17)GO TO
CAME 3,[17.0]
JRST PN1
MOVE 3,[4.0] ; THE WDCNT
MOVE 2,RCLF+1 ; CLEF #
MOVEM 2,Q+5(1) ;PN(J+6)=CLEF
JRST PN3
PN1: MOVEM 6,XXX ;LK=LK+1 (6666↑)
MOVE 4,LLL ; -L- XWDS(L)=LK
ADDI 4,@1(16) ; ADDR. XWDS ARRAY
MOVEM 6,(4)
AOS LLL ;L=L+1
JRA 16,3(16)
SORT: 0 ; CALL SORT(XWDS)
MOVE 11,LLL ; L
SOJ 11,
MOVEI 4,1 ;I=1
MOVE 0,[16.0]
MOVE 1,[8.0]
SETZ 5, ; -K- DO 243 K=1,L-1
S2: MOVEI 7,@(16) ; ADDR. OF XWDS
ADDI 7,(5) ;LB=XWDS(K)+1
MOVE 6,(7)
;; MOVE 10,Q(6) ;IF(PN(LB).NE.16)GO TO 243
;; CAME 10,[16.0]
CAME 0,Q(6)
JRST S243
;; MOVE 10,Q-1(6) ;IF(PN(LB-1).LT.8)GO TO 243
;; CAMGE 10,[8.0]
CAMLE 1,Q-1(6)
JRST S243
MOVE 10,-1(7) ;JL=XWDS(K-1)
MOVE 10,Q+2(10)
MOVEM 10,Q+2(6) ;244 PN(LB+2)=PN(JL+3)
S243: AOJ 5,
CAME 5,11 ; -L-1
JRST S2 ; 243 CONTINUE
;; PUTS CONTINUATION OF TEXT IMMEDIATELY AFTER PREV. POS.
;; FOR SPACING PROBLEMS BELOW.
MOVEI 11,1 ;M=2
SETZ 12, ;J=1
S24: MOVE 13,[100000.0] ;24 RA=100000.;; POSITION
MOVE 1,LLL ; L
SOJ 1,
SETZ 14, ; -K-
S21: MOVEI 2,@(16) ;DO 21 K=1,L-1 - ADDR. OF XWDS -
ADDI 2,(14) ;JL=XWDS(K)+3
MOVE 2,(2)
MOVE 3,Q+2(2) ;R=PN(JL)
CAMN 3,[100000.0]
JRST SX21 ;IF(R.EQ.100000)GO TO 21
MOVE 3 ;241 IF(ABS(R-RA).GT..1)GO TO 240
FSBR 13
SKIPGE
MOVNS
CAMLE 0,[0.1]
JRST S240
MOVEM 13,Q+2(2) ; ((R=RA)) PN(JL)=R
JRST SX21 ;GO TO 21;; PUT IN HERE MULTI-VOICE TRAP SOMEDAY
S240: CAMLE 3,13 ;240 IF(R.GT.RA)GO TO 21
JRST SX21 ;; LINES THEM UP
MOVEI 4,(2) ; SAVES JL (I=K)
MOVE 13,3 ; RA=R ;21 CONTINUE
SX21: AOJ 14, ; -K-
CAME 14,1
JRST S21
CAMN 13,[100000.0] ;IF(RA.EQ.100000)GO TO 23
JRA 16,1(16); JUMP IF ALL SORTED
;;;; MOVE 10,(16) ;242 JL=XWDS(I)
MOVEI 15,(4) ;LA=JL
KIFIX 1,Q-1(4) ;N=PN(JL)+3
ADDI 1,3 ; N
MOVE 2,PTR-1(11) ; PWDS(M)=PWDS(M-1)+N
ADDI 2,(1)
MOVEM 2,PTR(11)
AOJ 11, ; M=M+1
;; FIXX(1) ;DO 22 K=J,J+N-1
ADDI 1,(12) ; -J+N-
S22: MOVE 2,Q-1(4) ; RN(K)=PN(JL)
MOVEM 2,XRN(12)
AOJ 12,
CAME 12,1
AOJA 4,S22 ;22 JL=JL+1
AOJ 4, ; (JL=JL+1)
MOVE 2,[100000.0] ; PN(LA+3)=100000
MOVEM 2,Q+2(15) ; PUT IT ASIDE
JRST S24 ; GO TO 24
SHIFT: 0 ; CALL SHIFT
SOS LLL ; (IN MAIN. L=L-1)
SETZ 2, ;K=1
SETZ 3, ;L=1
SETO 4, ;LK=1 ((LL=0))
SH221: MOVE 5,PX(2) ;221 IF(Q(IFIX(PN(K))+1))GO TO 321
MOVE 6,Q(5)
JUMPL 6,SH321
MOVE 7,PX+1(2)
SH421: MOVE 6,Q-1(5) ;DO 421 KL=IFIX(PN(K)),IFIX(PN(K+1))-1
MOVEM 6,Q(3) ; ((LL=LL+1))421 Q(LL)=Q(KL)
AOJ 5,
CAMGE 5,7
AOJA 3,SH421
AOJ 4, ;LK=LK+1
AOJ 3,
MOVE 1,3 ;PN(LK)=LL+1
AOJ 1,
MOVEM 1,PX+1(4)
SH321: AOJ 2, ;321 K=K+1
CAMGE 2,LLL ; (L) IF(K.LT.KK)GO TO 221
JRST SH221
AOJ 4,
MOVEM 4,LLL ; L=LK-1 ;; L=NUMBER OF ITEMS FOR RHY RECONS.
JRA 16,(16)
SHFT1: 0 ; CALL SHFT1(KQ)
MOVEI 2,1 ; -L- (KK=1)
MOVEI 6,1 ; -K-
SP: KIFIX 4,Q-1(6) ;220 JJ=Q(K)+3
ADDI 4,3
MOVEM 6,PX-1(2)
;;NEW POINTER
MOVE Q(6) ;IF(Q(K+1).NE.2.OR.Q(K).LT.6)GO TO SPA
CAME [2.0]
JRST SPA
MOVE [6.0]
CAMLE Q-1(6)
JRST SPA
MOVEI 13,(4) ; JJ
ADDI 13,(6) ; +K
MOVE 3,Q(13) ;IF(Q(JJ+1).NE.10.OR.Q(JJ).LT.6)GO TO SPA
CAMN 3,[10.0]
CAMLE Q-1(13)
JRST SPA
SKIPN IPG ;IF(IPG.EQ.0)GO TO SPA
JRST SPA ;do next only when extracting parts(IPG.NE.0)
SETO 3, ;M=0 (-1)
KIFIX 5,Q-1(13) ; KK=Q(JJ)+2
;DO SPB N=K,KK
ADDI 5,2 ; KK
MOVEI 7,(6) ; (N=K)
ADDI 5,(7) ; (KK=K+KK+JJ-1)
ADDI 5,(4)
;; SOJ 5, ; THE TOTAL NUM OF ITEMS TO SCRAMBLE
SPB: MOVE Q-1(7) ;M=M+1
AOJ 3, ; M
MOVEM XRN(3) ;SPB RN(M)=Q(N)
CAIGE 7,(5)
AOJA 7,SPB
MOVEI 3,(13) ; JJ
SUB 3,6 ; M=JJ-K (-1)
MOVEI 7,(5) ; KK
SUB 7,13 ; J=KK-JJ
MOVEI 11,(7) ; KA=J
ADDI 11,(6) ; +K
;; SOJ 11, ;KA=K+J-1
MOVEI 12,(6) ; N=K
MOVEI 14,(12)
MOVE 15,XRN+3(3) ; SAVE POS (R3)
SPC: MOVE XRN(3) ;DO SPB N=K,KA
MOVEM Q-1(12) ; M=M+1
AOJ 3, ;SPC Q(N)=RN(M)
CAIGE 12,(11)
AOJA 12,SPC
MOVEI 13,(6) ; JJ=K+J
ADDI 13,(7) ; JJ
SETZ 3, ; M=0
SOJ 5, ; KK-1
MOVE 7,XRN+3(3) ; POS OF THIS ITEM
MOVEM 7,Q+2(14) ;EXCHANGE THEM
MOVEM 15,XRN+3(3)
SPD: MOVE XRN(3) ;DO SPD N=JJ,KK-1
MOVEM Q(13) ; M=M+1
AOJ 3, ;SPD Q(N)=RN(M)
CAIGE 13,(5)
AOJA 13,SPD ; ALL THIS TO FIND NUM AFTER WHOLE REST.
JRST SP ;GO BACK TO GET RIGHT PNTRS NOW.
;K=K+JJ
SPA: ADDI 6,(4) ; -K- (KK=KK+1)
CAMGE 6,@(16) ;IF(K.LT.KQ)GO TO 220
AOJA 2,SP
AOJ 2, ;PN(KK)=K
MOVEM 6,PX-1(2)
MOVEM 2,LLL ;L=KK
JRA 16,1(16)
SHFT0: 0 ; CALL SHFT0(KQ)
MOVE 2,LLL ; L
MOVE 4,PTR-1(2)
SOJ 4,
MOVE 2,@(16) ; KQ
;; SETZ 3, ; K
;;SH32: MOVE XRN(3) ; DO 32 K=1,IFIX(PWDS(L))-1
;; MOVEM Q(2) ; KQ=KQ+1
;; AOJ 3,
;; CAME 3,4
;; AOJA 2,SH32
;; AOJ 2, ; 32 Q(KQ)=RN(K)
HRLZI 3,XRN ; PUT ADDR OF RN IN LEFT HALF
HRRI 3,Q(2) ; ADDR OF NEXT OPEN SLOT OF Q IN RIGHT HALF
ADDI 2,(4) ; TO LOCATE END OF TRANSFER
BLT 3,Q(2) ; THESE REPLACE THE ';;' ABOVE
MOVEM 2,@(16) ; NEW VALUE OF KQ
MOVEI 1
MOVEM LLL ; L
MOVEM XXX ; LK
JRA 16,1(16)
PSHFT: 0 ; CALL PSHFT(I)
MOVE 6,@(16)
MOVEI 2,1
MOVE 2,PX-1(2) ; DO 31 NA=1,I
MOVE 3,PX(6) ; RN(KL)=Q(NA)
; 31 KL=KL+1
MOVE 4,SF ; KL
PS31: MOVE 5,Q-1(2)
MOVEM 5,XRN-1(4)
AOJ 2,
CAIE 2,(3)
AOJA 4,PS31
AOJ 4,
MOVEM 4,SF ; PUT BACK NEW VALUE OF KL
JRA 16,1(16)
; SUBROUTINE ADDRST(RPOS,XWDS,PN)
; COMMON /XXX/LK,LP,JY /PTR/PWDS(250),L,LL,I,IX
; COMMON RS,JA,REST,J2,RQ(18),JX,JR,LX,RDIS
; DIMENSION XWDS(1),PN(1)
ADRST: 0 ; PN(LK)=6
MOVE 1,XXX ; LK
MOVE 6,[6.0] ; CALL ADRST(XWDS,RR)
MOVEM 6,Q-1(1)
MOVE 2,[2.0] ; PN(LK+1)=2
MOVEM 2,Q(1)
;; MOVE 13,.COMM. ; PN(LK+2)=RS
SETZM Q+1(1)
MOVE 3,DBX ; PN(LK+3)=RPOS-1. (DBX SAVED 'RR')
MOVEM 3,Q+=11(1) ; SEE (LK+3) BELOW
FSBR 3,[1.0]
MOVEM 3,Q+2(1)
SETZM Q+3(1) ; PN(LK+4)=0
SETZM Q+4(1) ; PN(LK+5)=0
SETZM Q+5(1) ; PN(LK+6)=0
MOVEM 6,Q+6(1) ; PN(LK+7)=6.
MOVE 10,[1.0]; PN(LK+8)=-1
MOVNM 10,Q+7(1)
; LK=LK+9
; L=L+1
; XWDS(L)=LK
; NEXT ADDS A BAR LINE
MOVEM 2,Q+=8(1) ; PN(LK)=2
MOVE [4.0] ; PN(LK+1)=4
MOVEM Q+=9(1)
;; MOVEM 13,PX+=10(1) ; PN(LK+2)=RS
SETZM Q+=10(1)
; PN(LK+3)=RPOS (SEE ABOVE)
MOVE 10,@1(16) ;GET BAR LINE INFO
MOVEM 10,Q+=12(1) ; PN(LK+4)=RR
; LK=LK+5
; L=L+1
; XWDS(L)=LK
; END
MOVE 2,LLL ; L
HRRZI 3,@(16) ; ADDR OF XWDS
ADDI 3,(2)
ADDI 1,=9
MOVE 4,1
MOVEM 4,(3) ;XWDS(L)=LK
ADDI 4,5
MOVEM 4,1(3) ;XWDS(L+1)=LK
ADDI 2,2
MOVEM 2,LLL ;L=L+2
ADDI 1,5
MOVEM 1,XXX ;LK=LK+14
JRA 16,2(16)
STAFF: 0 ; SUBROUTINE STAFF(P0,P1, P3,P4,P5,P6,P7,P8)
;; COMMON/XRN/RN(2000) /SF/KL,RT,KP,RSTJ2,NAMX
;; COMMON /PTR/PWDS(250),L,LL,I,IX
MOVE 2,SF+2 ; KP PWDS(KP)=KL
MOVE 4,SF ; KL
MOVEI 3,(4)
MOVEM 3,PTR-1(2)
AOJ 2, ; KP=KP+1
MOVEM 2,SF+2
MOVE 2,@(16) ; RN(KL)=P0
MOVEM 2,XRN-1(4)
MOVE @1(16) ; RN(KL+1)=P1
MOVEM XRN(4)
MOVE SF+1 ; RN(KL+2)=RT
MOVEM XRN+1(4)
MOVE @2(16) ; RN(KL+3)=P3
MOVEM XRN+2(4)
MOVE @3(16) ; RN(KL+4)=P4
MOVEM XRN+3(4)
MOVE @4(16) ; RN(KL+5)=P5
MOVEM XRN+4(4)
CAMGE 2,[4.0] ; IF(P0.LT.4.)GO TO 1
JRST ST1
MOVE @5(16) ; RN(KL+6)=P6
MOVEM XRN+5(4)
MOVE @6(16) ; RN(KL+7)=P7
MOVEM XRN+6(4)
MOVE @7(16) ; RN(KL+8)=P8
MOVEM XRN+7(4)
MOVE @=8(16) ; RN(KL+9)=P9
MOVEM XRN+=8(4)
MOVE @=9(16) ; RN(KL+10)=P10
MOVEM XRN+=9(4)
MOVE @=10(16) ; RN(KL+11)=P11
MOVEM XRN+=10(4)
MOVE @=11(16) ; RN(KL+12)=P12
MOVEM XRN+=11(4)
ST1: KIFIX 2,2 ;1 KL=KL+P0+3.
ADDI 2,3
ADDM 2,SF
JRA 16,=12(16) ; END
;;;RIGHT: 0 ; FUNCTION RIGHT(NA,J)
;; COMMON /PX/PN(1800) /Q/Q(9000)
;;; MOVE 4,@(16) ; NA K=NA+J
;;; ADD 4,@1(16) ; +J J IS EITHER +1 OR -1
;;; MOVE 5,[16.0]
;;;RT1: MOVE 3,PX-1(4) ; 1 L=PN(K)
;; MOVE Q(3) ; IF(Q(L+1).NE.16)GO TO 2
;; CAME [16.0] ; **** CAN'T USE AC2 - USED IN FORTRAN
;;; CAME 5,Q(3)
;;; JRST RT2
;;; ADD 4,@1(16) ; K=K+J
;;; JRST RT1 ; GO TO 1
;;;RT2: MOVE Q+2(3) ; 2 RIGHT=Q(L+3)
;;; JRA 16,2(16) ; END
RIGHT: 0 ;FUNCTION RIGHT(NA,J,JK)
MOVE 4,@(16)
MOVE 6,4
MOVE 11,@1(16) ; SAVE J IN 11
ADD 4,11 ; K=NA+J J= +1 OR -1
SKIPLE 4 ; IF(K.GT.0)GO TO RT4
JRST RT4
MOVE 0,Q+3 ;RIGHT=Q(JK+3)
JRA 16,3(16) ;RETURN
RT4: MOVEI 5,Q ; Q R=Q(JK+2)
ADD 5,@2(16)
MOVE 12,2(5) ; RX=Q(JK+3)-2 CURRENT POS. OF REST-2
;;; FSBR 12,[2.0] ; NEEDED IF NOTHING FOUND TO LEFT.
MOVE 5,1(5) ;R THE STAFF NUM.
MOVEI 8,1 ;JX=1 FOR REVERSE LOOP
SKIPL @1(16) ;IF(J.GT.0)JX=I FORWARD LOOP
MOVE 8,LLL+2
RT1: JSA 16,CODEN ; DO 134 K=NA-1,1,-1
JUMP PX ; R8=CODEN(KPN,K,Q,LL)
JUMP 4
JUMP Q
JUMP 7 ;LL
CAMN 0,[4.0] ; IF(R8.EQ.4)GO TO 234
JRST RT2
MOVE 3,Q+1(7) ; IF(Q(LL+2).NE.R)GO TO 134
CAME 3,5
JRST RT3
CAME 0,[18.0] ; IF(R8.EQ.18.OR.R8.EQ.17)GO TO 234
CAMN 0,[17.0] ; JUMP ON KEY SIG OR METER
JRST RT2
;; CAML 0,[10.0] ; IF(R8.GE.10)GO TO 134
;; JRST RT3
;; CAME 0,[3.0] ; IF(R8.NE.3)GO TO 234
;; JRST RT2
RT3: CAMN 4,8 ;134 CONTINUE
JRST .+3
ADD 4,11
JRST RT1
SKIPG 11 ;SKIP NEXT IF GOING FORWARD IN LOOP (LOOKING TO RIGHT)
MOVE 0,12 ;USE ITS OWN POS.-2 IF NOTHING FOUND TO LEFT
SKIPA ; RR=RX
RT2: MOVE 0,Q+2(7) ; C NOW FOUND ITEM TO LEFT OR RT ON THIS STAFF.
JRA 16,3(16) ;234 RR=Q(LL+3)
RESTS: 0 ;XLFT=0 -- CALL RESTS
SETZ 2,
MOVE 12,[4.0]
MOVE 13,[16.0] ; TO CATCH WORDS
MOVN 3,[99.0] ;SIG=-99
;; MOVE 4,3 ;CLEF=-99
SETZ 6, ; REST=0
MOVEI 7,1 ;K=1
RX50: MOVE 10,PX-1(7) ;50 JL=PN(K)
MOVE 11,Q(10) ;R=Q(JL+1)
JUMPN 2,RX5 ;IF(XLFT.NE.0)GO TO 5
CAMLE 11,[4.0] ;IF(R.LE.4)XLFT=Q(JL+3)
JRST RX5
MOVE 2,Q+2(10)
MOVEM 2,.COMM.+=13
JRST RX3
RX5: CAME 11,[17.0] ;5 IF(R.NE.17)GO TO 3
JRST RX3
MOVE 1,Q+4(10) ;IF(Q(JL+5).EQ.SIG)GO TO 60
CAMN 1,3
JRST RX60
MOVE 3,1 ;SIG=Q(JL+5)
RX3: CAME 11,[2.0] ;3 IF(R.NE.2)GO TO 231
JRST RX231
MOVE Q-1(10) ;IF(Q(JL).GE.6)GO TO 7
CAML [6.0]
JRST RX7
JRST RX231 ;NEXT (TO RX7) DOESN'T WORK YET. NEEDS TO EXPND DATA!
;; MOVE 1,PX-2(7) ;IF(Q(KPN(K-1))+1).NE.4)GO TO 231
;; CAMN 12,Q(1)
;; JRST RX55 ; ANY REST BETWEEN 2 BARS IS A "WHOLE" REST.
;; CAME 13,Q(1)
;; JRST RX231 ; IF NOT WORDS, JUMP
;; MOVE 14,PX-3(7)
;; CAME 12,Q(14) ; IS THIS ONE A BAR?
;; JRST RX231 ; NO
; WON'T CATCH IT IF THERE IS A CLEF, METER, ETC. PRESENT
;;RX55: MOVE 1,PX(7) ;IF(Q(KPN(K+1))+1).NE.4)GO TO 231
;; CAME 12,Q(1)
;; JRST RX231
; FOUND A WHOLE REST MEAS.
;;RX8: MOVE 11,[3.0] ;Q(JR)=3 (P7=3)
;; MOVE 13,PX-1(7) ;JR=JL+7
;; ADDI 13,6
;; CAMLE 12,Q(13) ;IF(Q(JR+1).GT.4)GO TO RX9
;; JRST RX9
;; MOVNM 11,Q-3(13) ;Q(JR-2)=-3 P5=-3 =DBL WHOLE REST
;; MOVE [8.0] ;IF(R.LT.8)GO TO RX9
;; CAMGE Q(13)
;; JRST RX9
;; MOVE 11,Q(13) ;Q(JR-1)=IFIX(R/4.0)+2.0
;; FDVR 11,12
;; KIFIX 11,11
;; FLTR 11,11
;; FADR 11,[2.0]
;;RX9: MOVEM 11,Q(13)
;; JRA 16,(16) ;RETURN
RX7: MOVN Q+7(10) ;IF(Q(JL+8).LE.-4)GO TO 231
SKIPLE Q+6(10) ;IF(Q(JL+7).LE.0)GO TO 231 (IGNORE NON-RHYTH.)
CAML [4.0] ;CATCH BAR REPEAT SIGN
JRST RX231
JUMPE RX231 ;IF(Q(JL+8).EQ.0)GO TO 231 (WHOLE REST OVER CUE NOTES)
JUMPN 6,RX6 ;7 IF(REST.NE.0)GO TO 6
MOVEI 13,(10) ;JR=JL+8
ADDI 13,6
; POINTER TO REST NUM.
MOVE 11,Q(13) ;R=Q(JR-1)
CAMGE 11,[5.0] ;IF(R.LT.5)R=5
MOVE 11,[5.0]
FMPR 11,[0.6] ;Q(JR-1)=R*.6
MOVEM 11,Q(13)
; REDUCE SIZE OF REST'S TIME SO IT WILL TAKE LESS SPACE.
RX6: FADR 6,[1.0] ;6 REST=REST+1
MOVEM 6,Q+1(13) ;Q(JR)=REST
MOVN [2.0]
MOVEM Q-3(13) ;Q(JR-4)=-2 (LOWER THE REST'S POS.)
MOVEI 10,(7) ;JL=K+2
ADDI 10,2
CAML 10,LLL ;IF(JL.GE.L)RETURN
JRA 16,(16)
;;; JRST RX8
MOVE 14,PX-1(10) ;LB=KPN(JL)
MOVE Q(14) ;IF(Q(LB+1).NE.2)GO TO 233
CAME [2.0]
JRST RX233 ; NEXT IS TO COMBINE MEASURES OF REST
MOVE Q-1(14) ;IF(Q(LB).LT.6)GO TO 233
CAMGE [6.0]
JRST RX233
; SKIP NON-WHOLE RESTS
MOVE 15,PX-2(10) ;N=KPN(JL-1)
;; MOVE Q(15) ;IF(Q(N+1).NE.4)GO TO 233
CAME 12,Q(15)
JRST RX233
; IS REST FOLLOWED BY A BAR? OR RHRSL NUM?(COULD BE A PROB. HERE!!!)
; SO IT WON'T BE FOUND NEXT TIME AROUND.
MOVN [1.0] ;Q(LB+1)=-1
MOVEM Q(14) ; CHANGE CODE #
MOVEM Q(15) ;Q(N+1)=-1
MOVEI 7,(10) ;K=JL
JRST RX6 ;GO TO 6
RX60: MOVE [1.0] ;60 Q(JL+1)=-1
MOVNM Q(10)
JRST RX231 ;GO TO 231
RX233: SETZ 6, ;233 REST=0
RX231: AOJ 7, ;231 K=K+1
CAMGE 7,LLL ;IF(K.LT.L)GO TO 50
JRST RX50
JRA 16,(16) ; END
EXCHG: 0 ;CALL EXCHG(MM(J),NN(J))
HRRZI 1,@(16) ; ADDR OF MM(J)
MOVE 2,1(1) ;VALUE OF MM(J+1)
EXCH 2,@(16) ;EXCHANGE
MOVEM 2,1(1) ; MM(J+1)
HRRZI 1,@1(16) ; ADDR OF NN(J)
MOVE 2,1(1) ;VALUE OF NN(J+1)
EXCH 2,@1(16) ;EXCHANGE
MOVEM 2,1(1) ; NN(J+1)
JRA 16,2(16)
EXCH: 0
MOVE @(16)
EXCH @1(16)
MOVEM @(16)
JRA 16,2(16)
INMUS: 0 ;CALL INMUS(NAME,EXT,RN,KWDS,RSTFAC)
MOVE 1,@(16)
MOVE 2,@1(16)
JSA 16,GETEXT
JUMP 1 ;NAME
JUMP 2 ;EXT
MOVE 11,4(16) ;LOC OF RSTFAC ARRAY
MOVE 12,3(16) ;LOC OF KWDS ARRAY
JSA 16,EXTIN ;ACCEPT 2,NAM
JUMP @11 ; CALL GETEXT(NAM,'MS')
JUMP [=20] ;READ ONLY 20 WDS IN PAGE ONLY****** NOT [=128]
MOVE 15,2(16) ;LOC OF RN ARRAY
I1: JSA 16,EXTIN ;CALL EXTIN(R,JJ)
JUMP @15 ;JUMP @R
JUMP =18(11) ;WDS ;THE WD CNT.
MOVE @15 ;@R ;IF(R(1).NE.INTEGER 1)GO TO I3
CAIE 1 ;OLD FORMAT ?
JRST I3 ;NO
USETI 12,2 ;YES, READ 2ND RECORD AGAIN (12 =CH)
JSA 16,EXTIN ;CALL EXTIN(RS,128)
JUMP @12 ;JUMP @KW
JUMP =17(11) ;JUMP NWDS ;CALL EXTIN(K,J)
JRST I1 ;GO BACK AND GET R ARRAY
I3: MOVEI 1,1 ;3 N=1 ;KK(NN)=N
MOVEM 1,(12) ;K(1)=1
MOVEI 5,1
I4: ADD 15,5 ;4 N=N+R(N)+3 HERE'S THE LOOP
KIFIX 5,-1(15) ;GET WD CNT -2
ADDI 5,3 ;NN=NN+1
ADD 1,5
AOJ 12, ;UPDATE THE COUNTER OF THE POINTER LIST
MOVEM 1,(12) ;KK(NN)=N
CAMGE 1,=18(11) ;IF(N.LT.JJ)GO TO 4
JRST I4
JRA 16,5(16)
RCURVE: 0 ; R7=RCURVE(R3)
MOVEI 2,@(16) ; R7=2.0+(R6-R3)/25.+ABS(R4-R5)/10.
MOVE 1,3(2)
FSBR 1,(2) ;R6-R3
MOVE 3,5(2) ;IF(R8.LT.-1)Z=Z+R8*2.
FADR 3,[1.0]
JUMPGE 3,RCRV ;R8=-2=BETWEEN NOTES, =-3=1ST NOTE IS DOTTED.
FADR 3,3
FADR 1,3
RCRV: FDVR 1,[25.0] ; /25.
MOVE 0,2(2)
FSBR 0,1(2) ;R5-R4
MOVMS ;ABSOLUTE VALUE
FDVR 0,[10.0] ; /10.
FADR 0,1
FADR 0,[2.0] ; +2.0 (THIS IS + .9 IN MS)
SKIPGE 4(2) ;IF(R7 WAS .LT.0)KEEP IT NEGATIVE.
MOVNS
JRA 16,1(16)
SHRNK: 0 ;CALL SHRNK(K,IT)
MOVE 10,@1(16)
MOVE 11,PX(10) ;END OF Q DATA
SOJ 10,
MOVE 2,@(16) ;K
MOVEI 12,(2)
MOVE 3,PX-1(2) ;PTR TO Q(n)
MOVEI 6,(3) ;SAME
MOVE 13,Q+2(3) ;POS. OF CLEF TO BE REMOVED.
MOVE 4,PX(2) ;PTR TO NEXT ITEM
MOVEI 1,(4) ;TO USE IN BLT
SUBI 3,(4) ;WDCCNT OF DELETE ITEM
SUB 4,PX+1(2) ; NEXT +1
SUB 3,4 ; AMOUNT OF CHANGE
SK: MOVE 5,PX+1(2)
SUB 5,PX(2)
ADD 5,PX-1(2)
MOVEM 5,PX(2)
CAIE 2,(10)
AOJA 2,SK
MOVE 2,PX(2) ; LAST PTR
MOVE 7,Q+2(6) ;POS FOR LATER "MOVE"
SK2: MOVE Q-1(1)
MOVEM Q-1(6)
AOJ 1,
CAIE 1,(11)
AOJA 6,SK2
MOVEM 10,@1(16)
MOVEM 10,LLL+2 ;I=LEND (FOR FINAL ENDPOINT)
;; AOJ 10, ; TO GET TO END OF DATA.
MOVEM 7,.COMM.+5 ;R4
SKMV: SETZM LLL+1 ;LL=0 (NO JUSTIFY)
MOVE 2,[200.0]
MOVEM 2,.COMM.+6 ;R5
SETZM .COMM. ;RS
MOVEM 2,.COMM.+=10 ;R9=R5
SETZM .COMM.+=8 ;R7
MOVEM 13,.COMM.+=9 ;R8=EXPAND REMAINDER OF LINE TO CLEF POS.
JSA 16,PTMOVE
JUMP Q
JUMP PX-1(12)
JRA 16,2(16)
EXPND: 0 ; TO SHIFT LINE TO RT. WHEN ADDING KSIG.
MOVE 5,[5.0]
MOVE 2,[7.1]
FMPR 2,STF+=8
MOVEM 2,.COMM.+5 ;R4=7*RSTJ2+.1
MOVE 12,@(16) ; GET PTR TO PX
ADDI 12,2 ; ADD 2 (FOR NOW, ANYWAY)
SETZM .COMM.+=9
JRST SKMV ; GO MOVE IT
CLFNUM: 0 ;X=CLFNUM(Q,PX,MS) (FUNCTION)
MOVEI 2,@1(16) ;GET PX'S ADDR
ADD 2,@2(16)
MOVE 2,(2) ;PX(MS)
MOVEI 1,@(16) ; ADDR OF Q
ADD 2,1 ;ADDR OF Q(PX(MS)+1)
MOVE 5(2) ;X=Q(PX(MS)+5)
MOVE 1,-1(2)
CAMGE 1,[3.0] ;IF (Q( ).LT.3)X=0
SETZ ; ANSWER IN AC0
JRA 16,3(16)
SLRV: 0 ; CALL SLRV(KK,C)
MOVE 1,@(16) ; KK
MOVE 2,@1(16) ; C
FADRM 2,Q+3(1) ; WORKS WITH Q ARRAY ONLY******
FADRM 2,Q+4(1) ; FOR Q(KK+4) AND (KK+5)
MOVNS Q+6(1) ; Q(KK+7)
JRA 16,2(16)
CLEFN: 0
MOVEI 3,@(16) ;FUNCTION CLEFN(Q,J)
ADD 3,@1(16) ;Q(J+1) NOW
MOVE 2,-1(3) ;IF(Q(J).LT.3)RR=0
SETZ 0,
CAML 2,[3.0]
MOVE 0,4(3)
JRA 16,2(16)
; CAMGE 0,[100.0]
; JRA 16,2(16) ;IF(Q(J+5).LT.100)RR=Q(J+5)
; JSA 16,AMOD
; JUMP 4(3) ;ELSE RR=AMOD(Q(J+5),100.0)
MMNN: 0 ;CALL MMNN(K)
MOVEI 2,1 ;N=N+1
ADDB 2,JN+1 ;NN(N)=0
;;;; SETZM XRN+=499(2)
MOVE @(16)
CAIE 0,3 ;IF(K.NE.3)NN(N)=-1 FOR SECONDARY POSITIONS.
SETOM XRN+=499(2)
ADD JN ;MM(N)=J+K
MOVEM XRN-1(2)
JRA 16,1(16)
CODEN: 0 ;FUNCTION CODEN(K,N,R,M)
MOVE 1,@1(16) ;PNTR TO K ARRAY
SOJ 1,
ADDI 1,@(16) ;ADD LOC OF K ARRAY
MOVE 1,(1) ;GET PNTR TO R ARRAY
MOVEM 1,@3(16) ;SEND IT BACK IN M
ADDI 1,@2(16) ;ADD LOC OF R ARRAY
MOVE (1) ;R(M+1) (CODE NUM OF ITEM)
JRA 16,4(16)
ZERO: 0 ;FUNCTION ZERO(X,Y)
MOVE @(16) ;ZERO=X-Y
FSBR @1(16)
SKIPGE ;IF(ABS(ZERO).LT..01)ZERO=0
MOVNS
CAMG 0,[0.01]
SETZ 0,
JRA 16,2(16) ;END
; DO NEXT IF MORE THAN 1 STAFF(KPG) AND DIFF. SIZE FACTORS ARE FOUND.
BARFAC: 0 ;CALL BARFAC(KPG,BFAC,JK) R=RSTFAC(1)
MOVE 10,STF ; DO 5112 K=2,KPG
MOVEI 2,1
BA: CAME 10,STF(2) ;5112 IF(R.NE.RSTFAC(K))GO TO 6112
JRST BB
AOJ 2,
CAML 2,@(16)
JRA 16,3(16) ; GO TO 3112 -- RETURN
JRST BA
; NEXT TO FIND PROBABLE SIZE FACTOR FOR THIS BAR. (NOT FOR PARTS)
; FIND LINE WITH MOST ACTIVITY.
; ALL THIS SORT OF WORKS. SOMEDAY REVIEW IT.********
BB: MOVEI 2,7 ;6112 DO 1112 K=1,8
BC: SETZM XRN(2)
SOJGE 2,BC ;1112 RN(K)=0
MOVE 2,@2(16) ; DO 112 K=JK,J-1
MOVE 7,[7.0]
;; MOVE 5,[5.0];;;;; WE COUNT ALL RESTS, EVEN WITH NO RHYTHM.
BD: MOVEM 2,KBD# ;'KBD' WILL BE 'K'
JSA 16,CODEN ; R=CODEN(KPN,K,Q,JD)
JUMP PX ; /PX/ IS KPN
JUMP KBD ; 'K'
JUMP Q
JUMP JD# ; 'JD'
CAMLE [3.0] ; IF(R.GT.3.)GO TO 112
JRST B112
MOVE 4,[1.0] ; A=1.0
CAMN [2.0] ; CHECKS FOR NUMBER OF NOTES, RESTS, CLEFS.
MOVE 4,[0.6] ;AC0 IS R IF(R.EQ.2)A=0.6
; SKIP NON-RHYTHM CHORD NOTES. RESTS ARE CONSIDERED LESS IMPORTANT.
MOVE 11,JD ; GET POINTER TO ITEM IN Q ARRAY
CAME [1.0] ; IF(R.NE.1)GO TO 4112
JRST B4112
CAMG 7,Q-1(11) ; IF(Q(JD).LT.7)GO TO 112
SKIPG Q+8(11) ; IF(Q(JD+9).LE.0)GO TO 112
JRST B112
B4112: KIFIX 12,Q+1(11) ;4112 LF=Q(JD+2)+1
FADRM 4,XRN(12) ; RN(LF)=RN(LF)+A
B112: AOJ 2, ;112 CONTINUE
CAMGE 2,JN ;/JN/ IS J
JRST BD
SETZ 2, ; JD=1
MOVE 3,XRN ; B=RN(1)*RSTFAC(1)
FMPR 3,STF
MOVEI 4,1 ; DO 2112 K=2,KPG
BE: MOVE 5,XRN(4) ; A=RN(K)*RSTFAC(K)
FMPR 5,STF(4)
CAMG 5,3 ; IF(A.LE.B)GO TO 2112
JRST B2112
MOVE 2,4 ; (-1) JD=K
MOVE 3,5 ; B=A
B2112: AOJ 4, ;2112 CONTINUE
CAME 4,@(16)
JRST BE
MOVE 2,STF(2) ; BFAC=BFAC*(RSTFAC(JD)+.1)
FADR 2,[0.1] ; +.1 ABOVE TO MINIMIZE DIFF. IN SIZE FACTOR.
FMPRM 2,@1(16)
JRA 16,2(16) ;RETURN
; WRITES AND READS DUMP MODE FILES WITH ANY EXTENSION.
CH3←12
CH2←11
BLKS←←=1
;CALL PUTEXT(<FILE>,<EXT>)
PUTEXT: 0 ;USES EXTOUT,FINEXT, CH2
MOVE 0,@0(16)
MOVEM 0,FILNAM
MOVE 0,@1(16)
MOVEM 0,EXTNAM
JSA 16,INTFIL
SETZM DIR+2
SETZM DIR+3
ENTER CH2,DIR
ERROR <ENTER FAILED>
JRA 16,2(16)
;CALL EXTOUT(<ARRAY>,<NO. OF WORDS>)
EXTOUT: 0
HRRZI 0,@0(16)
SUBI 0,1
MOVEM 0,COM
MOVN 0,@1(16)
HRLM 0,COM
OUTPUT CH2,COM
STATZ CH2,740000
ERROR <WRITE ERROR>
JRA 16,2(16)
INTFIL: 0 ;INITS DSK
MOVEI REGS
BLT REGS+3
INIT CH2,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
EXTF4: PUSHJ 17,INTF4
;NEXT IS NEAR TOP OF FILE.********
;INTF4: MOVE 0,FILNAM#
; MOVEM 0,FN#
; MOVE 1,[POINT 7,FN]
;INTF3: MOVE 2,[POINT 6,DIR]
; SETZM DIR
; MOVEI 3,5
;INTF1: ILDB 0,1
; CAIN 0," "
; JRST INTF2
; SUBI 0,40
; IDPB 0,2
; SOJG 3,INTF1
;INTF2: HRLZI REGS
; BLT 3
MOVE 0,EXTNAM#
MOVEM 0,EX#
MOVE 1,[POINT 7,EX]
EXTF3: MOVE 2,[POINT 6,DIR+1]
SETZM DIR+1
MOVEI 3,5
EXTF1: ILDB 0,1
CAIN 0," "
JRST EXTF2
SUBI 0,40
IDPB 0,2
SOJG 3,EXTF1
EXTF2: HRLZI REGS
BLT 3
JRA 16,0(16)
COM: OCT 0,0
COM1: 0
BLKNUM: 0
;CALL FINEXT
FINEXT: 0
CLOSE CH2,0
STATZ CH2,740000
ERROR <ERROR AFTER CLOSE>
RELEASE CH2,0
JRA 16,0(16)
;CALL GETEXT(<FILE>,<EXT>)
GETEXT: 0
MOVE 0,@0(16)
MOVEM 0,FILNAM
MOVE 0,@1(16)
MOVEM 0,EXTNAM
JSA 16,INTFIZ
SETZM DIR+3
SETZM DIR+2
LOOKUP CH3,DIR
ERROR <LOOKUP FAILED>
JRA 16,2(16)
INTFIZ: 0 ;INITS DSK FOR INPUT
MOVEI REGS
BLT REGS+3
INIT CH3,17
SIXBIT/DSK/
0
ERROR <CAN'T INIT DSK!>
;; JRST INTF4
JRST EXTF4
;CALL FASTI2(<ARRAY>,<NO. WORDS>)
EXTIN: 0
HRRZI 0,@0(16)
SUBI 0,1
MOVEM 0,COM
MOVN 0,@1(16)
HRLM 0,COM
INPUT CH3,COM
STATZ CH3,740000
0
JRA 16,2(16)
END